package ar.edu.utn.frba.disenio.aterrizar.filtros;

import java.util.ArrayList;

import ar.edu.utn.frba.disenio.aterrizar.aerolineas.Vuelo;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.BusquedaFiltrada;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.DecoratorFiltroOpcional;

public class Ubicacion extends DecoratorFiltroOpcional{
	
	public String ubicacionAsiento;
	private boolean centinel = false;
	
	public enum UbicacionAsiento {VENTANA,CENTRO,PASILLO}
	
	public Ubicacion(String unaUbicacion, BusquedaFiltrada busquedaaFiltrar) {
		super(busquedaaFiltrar);
		if (unaUbicacion != null) this.getUbicacionAsiento(unaUbicacion);
	}
	
	@Override
	public ArrayList<Vuelo> buscarVuelos(){
		ArrayList<Vuelo> busquedaaFiltrar = busqueda.buscarVuelos();
		
		if(this.ubicacionAsiento != null){
			ArrayList<Vuelo> retVal = new ArrayList<Vuelo>();
			for(Vuelo unVuelo : busquedaaFiltrar){
				this.centinel = false;
				for(Vuelo unVueloCandidato : unVuelo.getVuelos()){
					if(!unVueloCandidato.ubicacion.equals(ubicacionAsiento)){
						this.centinel = true;
					}
				}
				if(!this.centinel)retVal.add(unVuelo);			
	        }		
			return retVal;	
		}
		return busquedaaFiltrar;
	}
	
	public void getUbicacionAsiento(String ubicacionAsiento) {
		try{
			switch(UbicacionAsiento.valueOf(ubicacionAsiento.toUpperCase()))
			{
			case VENTANA: 
				this.ubicacionAsiento = "V";
				break;
			case CENTRO: 
				this.ubicacionAsiento = "C";
				break;
			case PASILLO: 
				this.ubicacionAsiento = "P";
				break;				
			}
		}catch(Exception e)
		{
			throw new RuntimeException();
		}
		
	}
}